﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace GestionApp
{
    public partial class frmClientesDet : Form
    {
        private ModosOper modOpe;

        public void setModeOpe(ModosOper modo)
        {
            modOpe = modo;
        }

        public void setCodigo(string codigo)
        {
            txtCodigo.Text = codigo;
        }

        public frmClientesDet()
        {
            InitializeComponent();
        }

        private void frmClientesDet_Load(object sender, EventArgs e)
        {
            // CARGA INICIAL DE INFORMACIÓN

            // Cargar Combo Provincias
            clsComunGestion.CargaComboProvincias(cboProvincia, true);

            // Si el modo de operación es Alta
            if (modOpe == ModosOper.Alta)
            {
                // Asignar valores por defecto

                // Casi todos nuestros clientes son de la provincia de 'Málaga'
                cboProvincia.SelectedValue = "29";

                // El pago casi siempre se realiza con Tarjeta
                rbtPagoTarjeta.Checked = true;

                // A la check no se le asigna ningún valor
                // Por defecto seguirá estando desmarcada (false).
            }
            else
            {
                // Baja, Modificación o Consulta

                // Cargamos toda la información del Cliente
                CargaDatosCliente();
            }


            // CONFIGURACIÓN DEL ASPECTO VISUAL DE LA VENTANA

            if (modOpe == ModosOper.Alta)
            {
                // Título
                this.Text = "Alta de Clientes";

                // Proteger la clave
                txtCodigo.Enabled = false;

                // Campos obligatorios -> Fondo amarillo
                txtNombre.BackColor = Color.LightGoldenrodYellow;
                txtApellidos.BackColor = Color.LightGoldenrodYellow;
                txtDNI.BackColor = Color.LightGoldenrodYellow;

                // Deshabilito el botón Aceptar
                btnAceptar.Enabled = false;
            }

            if (modOpe == ModosOper.Baja)
            {
                // Título
                this.Text = "Baja de Clientes";

                // Proteger los campos
                // Recorrer en un bucle todos los controles del formulario actual
                foreach (Control xControl in this.Controls)
                {
                    //  Si no es un Button, deshabilito el control
                    if (xControl.GetType() != typeof(Button))
                    {
                        xControl.Enabled = false;
                    }
                }
            }

            if (modOpe == ModosOper.Modificacion)
            {
                // Título
                this.Text = "Modificación de Clientes";

                // Proteger la clave
                txtCodigo.Enabled = false;

                // Campos obligatorios -> Fondo amarillo
                txtNombre.BackColor = Color.LightGoldenrodYellow;
                txtApellidos.BackColor = Color.LightGoldenrodYellow;
                txtDNI.BackColor = Color.LightGoldenrodYellow;
            }

            if (modOpe == ModosOper.Consulta)
            {
                // Título
                this.Text = "Consulta de Clientes";

                // Proteger los campos
                // Recorrer en un bucle todos los controles del formulario actual
                foreach (Control xControl in this.Controls)
                {
                    //  Si no es un Button, deshabilito el control
                    if (xControl.GetType() != typeof(Button))
                    {
                        xControl.Enabled = false;
                    }
                }

                // Configurar los botones
                btnAceptar.Visible = false;
                btnCancelar.Text = "Aceptar";
            }
        }

        // Función para informar todos los campos de un Cliente
        private void CargaDatosCliente()
        {
            // Conexión con la base de datos
            MySqlConnection miConexion;

            // Comando SQL a ejecutar
            MySqlCommand miComando;
            MySqlDataReader miReader;   // Resultado de la selección
            string strSQL;              // Sentencia SQL a ejecutar

            // Crear la conexión con la base de datos 
            miConexion = new MySqlConnection();

            try
            {
                // Asignar la cadena de conexión a la base de datos
                miConexion.ConnectionString = clsComun.getCadenaConexionBD();

                // Abrir la conexión
                miConexion.Open();

                // Preparar la cadena con la sentencia SQL a ejecutar
                strSQL = "select * from clientes where cod_cli = " + txtCodigo.Text;

                // Ejecución de la consulta
                miComando = new MySqlCommand(strSQL, miConexion);

                // Ejecutar la consulta y almacenar el resultado en el objeto Reader
                miReader = miComando.ExecuteReader();

                // Si la consulta no ha devuelto ningún registro
                if (miReader.Read() == false)
                {
                    MessageBox.Show("El Cliente no existe.",
                                    "Error",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                }
                else
                {
                    // Mostrar la información en la ventana
                    txtNombre.Text = miReader.GetString("nombre");
                    txtApellidos.Text = miReader.GetString("apellidos");
                    txtDNI.Text = miReader.GetString("dni");
                    txtFechaNac.Text = miReader.GetString("fecha_nac");

                    if (miReader.IsDBNull(miReader.GetOrdinal("direccion")))
                        txtDireccion.Text = "";
                    else
                        txtDireccion.Text = miReader.GetString("direccion");

                    if (miReader.IsDBNull(miReader.GetOrdinal("poblacion")))
                        txtPoblacion.Text = "";
                    else
                        txtPoblacion.Text = miReader.GetString("poblacion");

                    if (miReader.IsDBNull(miReader.GetOrdinal("cod_postal")))
                        txtCodPostal.Text = "";
                    else
                        txtCodPostal.Text = miReader.GetString("cod_postal");

                    if (miReader.IsDBNull(miReader.GetOrdinal("cod_prov")))
                        cboProvincia.SelectedValue = 0;
                    else
                        cboProvincia.SelectedValue = miReader.GetInt32("cod_prov");

                    if (miReader.IsDBNull(miReader.GetOrdinal("tlf_fijo")))
                        txtTelFijo.Text = "";
                    else
                        txtTelFijo.Text = miReader.GetString("tlf_fijo");

                    if (miReader.IsDBNull(miReader.GetOrdinal("tlf_movil")))
                        txtTelMovil.Text = "";
                    else
                        txtTelMovil.Text = miReader.GetString("tlf_movil");

                    if (miReader.IsDBNull(miReader.GetOrdinal("email")))
                        txtEmail.Text = "";
                    else
                        txtEmail.Text = miReader.GetString("email");

                    chkVip.Checked = Convert.ToBoolean(miReader.GetString("vip"));

                    switch (miReader.GetInt32("forma_pago"))
                    {
                        case (int)FormaPago.Efectivo:
                            rbtPagoEfectivo.Checked = true;
                            break;
                        case (int)FormaPago.Tarjeta:
                            rbtPagoTarjeta.Checked = true;
                            break;
                        case (int)FormaPago.Transferencia:
                            rbtPagoTransferencia.Checked = true;
                            break;
                    }

                    if (miReader.IsDBNull(miReader.GetOrdinal("notas")))
                        txtObservaciones.Text = "";
                    else
                        txtObservaciones.Text = miReader.GetString("notas");
                }

                // Cerrar el objeto Reader
                miReader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message,
                                "Error",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }
            finally
            {
                // Desconexión de la base de datos
                miConexion.Close();
            }
        }
//************************************************************
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
            this.Close();
        }

        
    }
}
